/**
 * <p>Title: SplitOp.java</p>
 * <p>Description: 分割算子 </p>
 * <p>Copyright: Copyright (c) 2018</p>
 *
 * @author ji'anyuan
 * @date 2018年3月10日
 * @version 1.0
 */
package org.mango.jiayin.operater.operater.impl;

import java.util.Map;
import java.util.regex.Pattern;
import org.mango.jiayin.operater.exception.OperaterException;
import org.mango.jiayin.operater.operater.Operater;

/**
 * <p>
 * Title: SplitOp
 * </p>
 * <p>
 * Description: 分割算子 例如: split(|, log)-->将data中log对应的字符串以'|'分割,返回字符串数组 例如: split(',', 'aa,bb,cc')-->返回数组{"aa","bb","cc"}
 * </p>
 *
 * @author ji'anyuan
 * @date 2018年3月10日
 */
public class SplitOp implements Operater {

  private static final Pattern pattern = Pattern.compile("\\||\\,|\\$|\\*|\\.|\\+|\\?|\\\\");

  @Override
  public String getName() {
    return "split";
  }

  @Override
  public Object calc(String[] opParames, Object data, Map<String, Object> nestValues) {
    Operater.checkParames(opParames,2);
    Object[] values = Operater.getopParamesValues(opParames, data, nestValues);


    if (values[0] instanceof String && values[1] instanceof String) {
      String regex = (String) values[0];
      if (pattern.matcher(regex).matches()) {
        regex = String.format("\\%s", regex);
      }
      return String.valueOf(values[1]).split(regex);
    }

    return null;
  }
}
